package com.misyi.designpattern.adapter;

/**
 * 适配器模式
 *
 * @author licong
 * @date 2021-09-10 下午10:02
 */
public class AdapterPatternDemo {

    public static void main(String[] args) {
        // 问题:
        // 1. 我们现在有一套老接口和一套新接口
        // 2. 但是现在需要全部针对新接口调用, 但是可以走老逻辑
        NewInterfaceAdapter newInterfaceAdapter = new NewInterfaceAdapter(new OldInterfaceImpl());
        newInterfaceAdapter.newExecute();

        NewInterface newInterface = new NewInterfaceImpl();
        newInterface.newExecute();

        // 适配器模式大量应用于第三方工具的封装类, 例如 redis 工具的全是 lset lget 等,
        // 我们创建一个适配器, 然后定义为我们自己使用的方法
    }

    /**
     * 针对新接口添加一个适配器
     */
    public static class NewInterfaceAdapter implements NewInterface {

        private final OldInterface oldInterface;

        public NewInterfaceAdapter(OldInterface oldInterface) {
            this.oldInterface = oldInterface;
        }

        @Override
        public void newExecute() {
            oldInterface.oldExecute();
        }
    }


    public interface OldInterface {
        void oldExecute();
    }

    public static class OldInterfaceImpl implements OldInterface {

        @Override
        public void oldExecute() {
            System.out.println("老的执行方法!");
        }
    }

    public interface NewInterface {
        void newExecute();
    }

    public static class NewInterfaceImpl implements NewInterface {

        @Override
        public void newExecute() {
            System.out.println("新的执行方法");
        }
    }
}
